为什么需要目标管理

OpenClaw 的 cron、子代理、长耗时 exec 任务很多都是"发射后不管"。任务挂了、跑到一半卡住、或者做完了你却不知道——这些问题靠人肉记不现实。

目标管理三件套就是给任务装一个持久化的完成状态:

  • create_goal:建一个目标,写明要达成什么。
  • get_goal:随时查当前状态、token 消耗、完成与否。
  • update_goal:把状态改成 complete 或 blocked,附说明。

注意:目标只在实际有用户或系统明确请求时才建。它不是用来代替 todo 清单的,而是长任务对外可见的"进度招牌"。

create_goal:开干前先立旗

参数很简单:

| 参数 | 说明 |

|------|------|

| objective | 目标描述,必填,要具体可验收 |

| token_budget | 可选,给目标设 token 上限 |

示例(在 OpenClaw 工具调用语境):

create_goal({
  objective: "把 zyker.cn 的 6 篇文章生成并发布上线,含选题去重与首页重建",
  token_budget: 20000
})

建完之后,这个目标会挂在该会话旁边,你和 AI 都能看到"进行中"。

关键行为

  1. 一个会话同时只能有一个活跃目标:重复 create_goal 会失败,先 update_goal(status="complete") 收尾再开新的。
  1. token_budget 是软约束:超了不会硬停,但会在状态里体现,方便你判断"是不是烧太多了"。
  1. 目标状态独立于任务本身——即使 AI 中途上下文重置,目标记录还在。

get_goal:随时回看进度

不需要参数,返回当前目标的:

  • status:complete / blocked / 进行中
  • objective:原始目标描述
  • token 用量统计
  • 最近一次更新说明

示例:

get_goal({})

实战里常配合 session_status 一起用——前者看"任务做没做完",后者看"模型/用量/时间"。

update_goal:收尾或告警

| 参数 | 说明 |

|------|------|

| status | complete 或 blocked,必填其一 |

| note | 短状态说明,可选但强烈建议写 |

示例:

update_goal({
  status: "complete",
  note: "6 篇文章已生成并运行 sync_site.py 上线,首页与 sitemap 已重建"
})

blocked 的正确用法

连续 3 个以上目标轮次都卡在同一个阻塞点上,才标 blocked——普通的中途困难不算。标了之后,AI 不会再假装"快好了",而是如实告诉你卡在哪。

标准工作流

  1. 接到大活(如"生成 6 篇文章并发布")→ create_goal 立旗。
  1. 执行中途 → 需要看进度就 get_goal,不用人肉问"做没做"。
  1. 做完了 → update_goal(status="complete", note="..."),明确交代产出。
  1. 真卡住(缺凭据、缺权限)→ update_goal(status="blocked", note="缺 XX")。

踩坑与反模式

  • ❌ 把 goal 当 todo 列表用:它是对外的完成招牌,不是内部 checklist。内部步骤用 progress_card 或普通列表即可。
  • ❌ 做完不收尾:目标一直"进行中",下次会话看到会误判没做完。
  • ❌ 普通难度也标 blocked:只有真正卡住(等外部输入/权限)才用,别拿它当"还没搞完"的同义词。
  • ✅ 大活必建目标:凡是"生成 N 篇 / 部署一套 / 跑通一个流程"这种多步任务,开局立旗最省心。

和其他工具的分工

  • create_goal / update_goal:任务级完成状态(对外可见)。
  • progress_card:步骤级进度条(更细,适合长任务的过程展示)。
  • create_goal 偏"结果",progress_card 偏"过程",两者可叠加用。

一句话总结

长任务最怕"做没做完说不清"。开局 create_goal 立旗,中途 get_goal 回看,收尾 update_goal 交代——你的 AI 搭档跑大活时,你随时知道它在哪。


扫码关注公众号,获取更多 OpenClaw 实操技巧:

公众号二维码